/*-------------------------------------------------------------------------
 *
 * pg_statistic_ext.h
 *	  "扩展统计" 系统目录 (pg_statistic_ext) 的定义
 *
 * 请注意，pg_statistic_ext 包含扩展统计对象的定义，
 * 由 CREATE STATISTICS 创建，但不包含实际的统计数据，
 * 这些数据是通过运行 ANALYZE 创建的。
 *
 * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
 * Portions Copyright (c) 1994, Regents of the University of California
 *
 * src/include/catalog/pg_statistic_ext.h
 *
 * NOTES
 *	  Catalog.pm 模块读取此文件并推导模式信息。
 *
 *-------------------------------------------------------------------------
 */
#ifndef PG_STATISTIC_EXT_H
#define PG_STATISTIC_EXT_H

#include "catalog/genbki.h"
#include "catalog/pg_statistic_ext_d.h"

/* ----------------
 *		pg_statistic_ext 定义。 cpp 将其转换为
 *		typedef struct FormData_pg_statistic_ext
 * ----------------
 */
CATALOG(pg_statistic_ext,3381,StatisticExtRelationId)
{
	Oid			oid;			/* oid */

	Oid			stxrelid BKI_LOOKUP(pg_class);	/* 包含关系
												 * 属性 */

	/* 这两个字段构成该条目的唯一键： */
	NameData	stxname;		/* 统计对象名称 */
	Oid			stxnamespace BKI_LOOKUP(pg_namespace);	/* 统计对象的 OID
														 * 所在命名空间 */

	Oid			stxowner BKI_LOOKUP(pg_authid); /* 统计对象的所有者 */
	int32		stxstattarget BKI_DEFAULT(-1);	/* 统计目标 */  

	/*
	 * 可变长度字段从这里开始，但我们允许直接访问
	 * stxkeys
	 */
	int2vector	stxkeys BKI_FORCE_NOT_NULL; /* 列键数组 */

#ifdef CATALOG_VARLEN
	char		stxkind[1] BKI_FORCE_NOT_NULL;	/* 风险统计种类请求
												 * 的构建 */
	pg_node_tree stxexprs;		/* 一组用于统计
								 * 属性的表达式树，这些属性不是简单的列
								 * 引用。 */
#endif

} FormData_pg_statistic_ext;

/* ----------------
 *		Form_pg_statistic_ext 对应于具有
 *		pg_statistic_ext 关系格式的元组的指针。
 * ----------------
 */
typedef FormData_pg_statistic_ext *Form_pg_statistic_ext;

DECLARE_TOAST(pg_statistic_ext, 3439, 3440);

DECLARE_UNIQUE_INDEX_PKEY(pg_statistic_ext_oid_index, 3380, StatisticExtOidIndexId, on pg_statistic_ext using btree(oid oid_ops));
DECLARE_UNIQUE_INDEX(pg_statistic_ext_name_index, 3997, StatisticExtNameIndexId, on pg_statistic_ext using btree(stxname name_ops, stxnamespace oid_ops));
DECLARE_INDEX(pg_statistic_ext_relid_index, 3379, StatisticExtRelidIndexId, on pg_statistic_ext using btree(stxrelid oid_ops));

DECLARE_ARRAY_FOREIGN_KEY((stxrelid, stxkeys), pg_attribute, (attrelid, attnum));

#ifdef EXPOSE_TO_CLIENT_CODE

#define STATS_EXT_NDISTINCT			'd'
#define STATS_EXT_DEPENDENCIES		'f'
#define STATS_EXT_MCV				'm'
#define STATS_EXT_EXPRESSIONS		'e'

#endif							/* EXPOSE_TO_CLIENT_CODE */

#endif							/* PG_STATISTIC_EXT_H */
